// refs: https://axios.nuxtjs.org/helpers.html#interceptors
export default function ({ $axios, store, redirect }, inject) {
  // $axios.setBaseURL()

  // $axios.setHeader()

  // $axios.setToken()

  // 请求之前
  $axios.onRequest((config) => {
    // TODO: 发送请求前数据处理
    if (process.env.NODE_ENV !== 'production') {
      // console.groupCollapsed('request options')
      // console.log(config)
      // console.groupEnd()
    }

    if (process.browser) {
      // 请求前删除当前接口上一次请求的错误信息
      store.commit('errors/remove', config.url)
    }
  })

  // 请求成功
  $axios.onResponse((resp) => {
    const response = resp.data

    if (`${response.code}` !== '1') {
      return Promise.reject(response)
    }

    return Promise.resolve(response.data)
  })

  // 请求失败
  $axios.onError((error) => {
    const { message, response: resp = {} } = error
    const { status, config = {} } = resp
    const { url: key } = config

    // Docker 记录错误日志
    console.error('Api response error:', error)

    if (process.browser && key) {
      // TODO: 客户端统一触发 Store
      store.commit('erros/add', { key, status, message })
    } else if (status === 401) {
      // TODO: 服务端
      redirect('/401')
    } else {
      // TODO: 服务端
    }

    return Promise.reject(error)
  })

  // $axios.onRequestError(error => {
  //   console.log('onRequestError', error)
  // })

  // $axios.onResponseError(error => {
  //   console.log('onResponseError', error)
  // })
}
